#pragma GCC optimize(2)
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
#define pi acos(-1.0)
#define e exp(1.0)
typedef pair<ll,ll> pa;
const ll INF=0x3f3f3f3f3f3f3f3f;
const ll maxn=2e5+7;
ll N,X;
ll cal(ll l,ll r){
	return (r-l+1)*(r+l)/2;
}
int main()
{
//  freopen(".../.txt","w",stdout);
//  freopen(".../.txt","r",stdin);
	ios::sync_with_stdio(false);
	cin>>N>>X;
	vector<ll>a(N<<1);
	ll i,j;
	for(i=0;i<N;i++){
		cin>>a[i];
		a[i+N]=a[i];
	}
	a.push_back(a[0]);
	ll sum[N<<1],sum2[N<<1];
	auto chk=[&](ll i,ll j){
		return i==0?sum[j]:sum[j]-sum[i-1];
	};
	sum[0]=a[0];
	for(i=0;i<N<<1;i++){
		if(i==0){
			sum[i]=a[i];
			sum2[i]=cal(1,a[i]);
		}
		else{
			sum[i]=sum[i-1]+a[i];
			sum2[i]=sum2[i-1]+cal(1,a[i]);
		}
	}
	ll res=0;
	for(i=0;i<N;i++){
		ll pos,mus;
		if(i==0)
		j=lower_bound(sum+i,sum+2*N,X)-sum;
		else
		j=lower_bound(sum+i,sum+2*N,sum[i-1]+X)-sum;
//		cout<<i<<' '<<j<<endl;
		if(i==j)
		res=max(res,cal(a[i]+1-X,a[i]));
		else{
			if(i==0)
			mus=sum[j]-X;
			else
			mus=sum[j]-sum[i-1]-X;
			mus=min(mus,a[i]-1);
//			cout<<"mus="<<mus<<endl; 
			if(mus>0){
				res=max(res,cal(1+mus,a[i])+sum2[j]-sum2[i]-cal((X-chk(i,j-1))+mus+1,a[j]));
			}
			else if(mus==0){
//				if(sum[j]-sum[i-1]==X)
//				res=max(res,sum2[j]-sum2[i-1]);
//				else
				res=max(res,sum2[j-1]-sum2[i-1]+cal(1,X-chk(i,j-1)));				
			}
		}
//		cout<<res<<endl;
	}
	cout<<res<<endl; 
	return 0;
}
